const express = require('express')
const utility = require('utility')
const mydb = require('../database/index')
// 创建路由实例对象
const router = express.Router()

// 非空校验在内置中间件之后，模块路由之前
router.use((req, res, next) => {
    // 此时可以接收到res.body
    const { username, password } = req.body
    // 分别验证username和password判断 
    // 两种情况   不输入  输入为空
    if (/^\S{6,10}$/.test(username) == false || username == undefined) {
        // return res.send({status:1, message:'用户名必须是6到10位非空白字符'})
        // next(err)方式 必须加return
        // return next(new Error('用户名必须是6到10位非空白字符'))
        // 抛出错误 当错误抛出停止后面的代码
        throw new Error('用户名必须是6到10位非空白字符')
    }
    if (/^\S{6,10}$/.test(password) == false || password == undefined) {
        // return res.send({status:1, message:'用户密码必须是6到10位非空白字符'})
        // next(err)方式 必须加return
        // return next(new Error('用户密码必须是6到10位非空白字符'))
        // 抛出错误 当错误抛出停止后面的代码
        throw new Error('用户密码必须是6到10位非空白字符')

    }
    // 满足条件 流转关系 
    next()
})

// 注册接口
router.post('/reguser', (req, res) => {
    // 解构赋值 req.body 请求体数据
    let { username, password } = req.body
    // 密码加密
    password = utility.md5(password)
    let sql = `select * from user where username="${username}"`
    mydb(sql, (err, results) => {
        if (err) {
            return res.send({ status: 1, message: 'sql语法错误' + err.message })
        }
        // 验证用户名是否已存在
        if (results.length > 0) {
            return res.send({ status: 1, message: '用户名已重复，请更改' })
        }
        // 已经查询成功并验证成功
        // 执行添加 sql数据  let sql暂时死区
        let sql = ` insert into user set  username="${username}",password="${password}" `
        mydb(sql, (err, results) => {
            if (err) {
                return res.send({ status: 1, message: 'sql语法错误' + err.message })
            }
            if (results.affectedRows !== 1) {
                return res.send({ status: 1, message: '注册失败' })
            }

            // 注意位置
            res.send({ status: 0, message: '注册成功！' })
        })
    })
})

// 登录接口
router.post('/login', (req, res) => {
    // 接收参数 结构赋值
    let { username, password } = req.body
    // console.log(username,password);
    // res.send('用户登录成功！')
    // 加密用户密码
    password = utility.md5(password)
    let sql = `select * from user where username="${username}" and password="${password}"`
    mydb(sql, (err, results) => {
        if (err) {
            return res.send({ status: 1, message: 'sql语法错误' + err.message })
        }
        if (results.length === 0) {
            return res.send({ status: 1, message: '用户名或密码错误！' })
        }
        const jwt = require('jsonwebtoken')
        const token = 'Bearer ' + jwt.sign({ id: results[0].id }, 'dijia123', { expiresIn: '24h' })
        res.send({ status: 0, message: '登录成功！', token: token })
    })
})

module.exports = router